// var a=12;
var a:number;
a=12;


// 布尔值
let isLogin: boolean = false

// 数字
let userAge: number = 18

// 字符串
let userName: string = 'Jony'

// 数组
let list: number[] = [1, 2, 3]
let arry: Array<number> = [1, 2, 3] //数组泛型

// 元组Tuple
// 当访问一个越界的元素，会使用联合类型替代
let tuple: [string, boolean, number] = ['a', true, 8]
tuple = ['a', true, 8]

// 枚举
enum Color {Red, Green=3, Blue}
let oneColor: Color = Color.Blue
console.log(oneColor);//如果没有赋值，它的值就是下标。

//自动递增，或者全部手动赋值
enum Province {BeiJing = 1,Tianjin,Nanjing}

let cityName: string = Province[3]
console.log(`cityName: ${cityName}`)

// Any
let notSureValue: any = 4
notSureValue = 'maybe a string instead'
notSureValue = false

let anyTypeList: any[] = [1, true, 'b']

// Void
//与any 相反，没有任何类型，一般用于没有返回值的方法
//void变量只能赋值undefined 或null
let unusable: void = undefined

// Null & Undefined
// 和void 相似
// 默认是所有类型的子类型

// Never
// 表示用不存在的值的类型

// Object
// 非原始类型


// 类型断言
// 只在编译阶段起作用
let someValue: any = 'this is a string'
let strLength: number
strLength = someValue.length
strLength = (<string>someValue).length
strLength = (someValue as string).length

console.log(strLength) //16

